﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;

namespace VkClientIM.UI
{
	/// <summary>
	/// Follow steps 1a or 1b and then 2 to use this custom control in a XAML file.
	///
	/// Step 1a) Using this custom control in a XAML file that exists in the current project.
	/// Add this XmlNamespace attribute to the root element of the markup file where it is 
	/// to be used:
	///
	///     xmlns:MyNamespace="clr-namespace:VkClientIM.UI"
	///
	///
	/// Step 1b) Using this custom control in a XAML file that exists in a different project.
	/// Add this XmlNamespace attribute to the root element of the markup file where it is 
	/// to be used:
	///
	///     xmlns:MyNamespace="clr-namespace:VkClientIM.UI;assembly=VkClientIM.UI"
	///
	/// You will also need to add a project reference from the project where the XAML file lives
	/// to this project and Rebuild to avoid compilation errors:
	///
	///     Right click on the target project in the Solution Explorer and
	///     "Add Reference"->"Projects"->[Browse to and select this project]
	///
	///
	/// Step 2)
	/// Go ahead and use your control in the XAML file.
	///
	///     <MyNamespace:MyStatusTextBox/>
	///
	/// </summary>
	public class MyStatusTextBox : TextBox
	{
		public static DependencyProperty TextChangeEventTimeDelayProperty =
		DependencyProperty.Register(
			"TextChangeEventTimeDelay",
			typeof(Duration),
			typeof(MyStatusTextBox),
			new FrameworkPropertyMetadata(
				new Duration(new TimeSpan(0, 0, 0, 1, 500)),
				new PropertyChangedCallback(TextChangeEventTimeDelayChanged)));

		private static void TextChangeEventTimeDelayChanged( DependencyObject d, DependencyPropertyChangedEventArgs e )
		{
			MyStatusTextBox txt = d as MyStatusTextBox;
			if (txt != null)
			{
				txt._textChangeEventDelayTimer.Interval = ((Duration)e.NewValue).TimeSpan;
				txt._textChangeEventDelayTimer.Stop();
			}

		}

		private DispatcherTimer _textChangeEventDelayTimer;

		static MyStatusTextBox()
		{
			DefaultStyleKeyProperty.OverrideMetadata( typeof (MyStatusTextBox),
			                                          new FrameworkPropertyMetadata( typeof (MyStatusTextBox) ) );
		}
	}
}
